High availability is a system design approach and associated service implementation that ensures a prearranged level of operational performance will be met during a contractual measurement period. Users want software systems to be ready to serve them at all times. Availability refers to the ability of the user community to access the system, whether to submit new work, update or alter existing work, or collect the results of previous work. If a user cannot access the system, it is said to be unavailable. Generally, the term downtime is used to refer to periods when a system is unavailable.
Virtualization or cloud-computing environments has allowed IT infrastructure to reduce dependence on physical hardware. Yet, virtual machines still run in memory on a physical host. If the physical host reboots or fails, the memory also fails. In a high-availability configuration, this requires that another virtual machine take over providing services. However, any data in the memory of the failing virtual machine will be lost. There is also a time delay while the backup resources are brought on line and start providing service. In the past, work has been done to cut down this failover time for virtual machines by keeping two copies of memory so that a second virtual machine can be started and pickup exactly where the other virtual machine left off. With the growth in memory sizes, keeping two virtual machine's memory in sync across the network has become very difficult.